package br.com.felipe.agendamento.dao;

import java.util.List;

import org.hibernate.Criteria;

public interface BaseDao<T> {

	/**
	 * Adiciona um registro no banco de dados
	 * @param t - classe com os valores
	 */
    public void adicionar(final T t);
    
    /**
     * Remove um registro no banco de dados
     * @param t - registro a ser removido
     */
    public void remover(final T t);

    /**
     * Remove um registro no banco de dados
     * @param id - id do registro
     */
    public void remover(final Integer id);
    
    /**
     * Busca um registro no banco de dados
     * @param id - identificador unico do registro na tabela
     * @return
     */
    public T buscaPorId(final Integer id);
    
    /**
     * Recupera todos os registro de uma tabela do banco de dados
     * @return list com os registros
     */
    public List<T> lista();

    /**
     * Atualiza um registro na tabela
     * @param t - registro a ser atualizado
     */
    public void atualizar(final T t);
    
    /**
     * Recupera um objeto de criteria com a classe do dao corrente
     * @return criteria
     */
    public Criteria getCriteria();
    
    /**
     * Recupera um objeto de criteria com uma classe especificada no paramentro
     * @param classe - classe da criteria
     * @return criteria
     */
    public Criteria getCriteria(final Class<T> classe);
}
